package cn.bugstack.springframework.beans.factory.support;

import cn.bugstack.springframework.beans.BeansException;
import cn.bugstack.springframework.core.io.Resource;
import cn.bugstack.springframework.core.io.ResourceLoader;

/**
 * 在 Spring 中，BeanDefinitionReader 接口及其实现类主要用于读取和解析 Bean 定义，
 * 从不同的配置源（如 XML 文件、注解、Java 配置等）中加载 Bean 定义信息，并将其注册到容器中。
 */
public interface BeanDefinitionReader {

    /**
     * 获取Bean定义注册表。
     * @return Bean定义注册表实例。
     */
    BeanDefinitionRegistry getRegistry();

    /**
     * 获取资源加载器。
     * @return 资源加载器实例。
     */
    ResourceLoader getResourceLoader();

    /**
     * 从给定的资源加载Bean定义。
     * @param resource 要加载的资源，单个资源。
     * @throws BeansException 如果加载过程中发生错误。
     */
    void loadBeanDefinitions(Resource resource) throws BeansException;

    /**
     * 从给定的资源数组加载Bean定义。
     * @param resources 要加载的资源数组。
     * @throws BeansException 如果加载过程中发生错误。
     */
    void loadBeanDefinitions(Resource... resources) throws BeansException;

    /**
     * 从给定的位置加载Bean定义。
     * @param location 资源的位置，可以是classpath或其他URL。
     * @throws BeansException 如果加载过程中发生错误。
     */
    void loadBeanDefinitions(String location) throws BeansException;


    void loadBeanDefinitions(String... locations) throws BeansException;

}

